// Copyright (C) 2010 von Karman Institute for Fluid Dynamics, Belgium
//
// This software is distributed under the terms of the
// GNU Lesser General Public License version 3 (LGPLv3).
// See doc/lgpl.txt and doc/gpl.txt for the license text.

#ifndef cf3_Math_LSS_ParameterListDefaults_hpp
#define cf3_Math_LSS_ParameterListDefaults_hpp

////////////////////////////////////////////////////////////////////////////////////////////

#include "common/Component.hpp"

#include "math/LSS/LibLSS.hpp"

////////////////////////////////////////////////////////////////////////////////////////////

/**
 *  @file ParameterListDefaults.hpp Interface for setting default values on Trilinos
 *  @author Bart Janssens
 **/
////////////////////////////////////////////////////////////////////////////////////////////

namespace Teuchos { class ParameterList; }

namespace cf3 {
namespace math {
namespace LSS {

////////////////////////////////////////////////////////////////////////////////////////////

/// Encapsulate a Teuchos parameter list
class LSS_API ParameterListDefaults : public common::Component
{
public:

  /// Default constructor
  ParameterListDefaults(const std::string& name) : common::Component(name)
  {
  }

  /// name of the type
  static std::string type_name () { return "ParameterListDefaults"; }

  /// Set the values of the passed parameterlist to the defualt values that are generated by the concrete implementation
  virtual void set_parameters(Teuchos::ParameterList& parameters) const = 0;

}; // end of class ParameterListDefaults

////////////////////////////////////////////////////////////////////////////////////////////

} // namespace LSS
} // namespace math
} // namespace cf3

#endif // cf3_Math_LSS_ParameterListDefaults_hpp
